package com.zwj.interview.双指针;

/**
 * @Author: Zwj
 * @Date: 2022/3/1 16:29
 * <p>
 * 输入一个有序的数组，将重复的元素在原地删除，并返回新的数组长度
 * <p>
 * 要想在原地删除，就不能引入新的数组，那么我们可以使用双指针，快指针往前不断的走，遇到和前面不同的元素就
 * 添加，当fast走完整个数组的时候，那么数组nums[0..slow]就是新的数组了
 */
public class 原地删除数组重复的元素 {

    public int removeDuplicates(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        //慢指针从1开始，我们默认保留数字第一个元素
        int id=1;
        //快指针也是从数组第二个元素开始扫描
        for(int i=1;i<nums.length;i++){
            if(nums[i]!=nums[id-1]){
                nums[id]=nums[i];
                id++;
            }
        }
        return id;
    }

    public int removeDuplicates2(int[] nums) {
        if(nums.length==0){
            return 0;
        }
        int id=1;
        for(int i=1;i<nums.length;i++){
            if(nums[i]!=nums[id-1]){
                nums[id]=nums[i];
                id++;
            }
        }
        return id;
    }
}